import { axiosInstance } from './axiosHelper'

/**
 * Base64图片上传请求
 */
interface Base64ImageRequest {
    base64Data: string    // Base64图片数据
    fileType: string      // 文件类型（如：jpg、png等）
    imageCategory?: string // 图片分类（如：养殖环境/生产加工/检验报告）
    productionBatch?: string // 关联的生产批次
    bucketName: string    // 存储桶名称（必填）
}

/**
 * 图片上传响应DTO
 */
interface ImageUploadResponseDto {
    imageUrl: string      // 图片完整URL路径
    relativePath: string  // 图片相对路径
    fileName: string      // 文件名
    fileSize: number      // 文件大小（字节）
}

/**
 * API返回结果
 */
interface ApiResult<T> {
    code: number
    message: string | null
    data: T | null
    timestamp: number
    success: boolean
}

/**
 * 图片查询参数
 */
interface ImageQueryParams {
    ImageCategory?: string  // 图片分类（如：养殖环境/生产加工/检验报告）
    ProductionBatch?: string  // 关联的生产批次
}

/**
 * 图片信息DTO
 */
interface ImageInfoDto {
    imageId: string       // 图片ID
    imageUrl: string      // 图片URL
    relativePath: string  // 相对路径
    fileName: string      // 文件名
    fileSize: number      // 文件大小
    bucketName: string    // 存储桶名称
    imageCategory: string // 图片分类
    productionBatch: string // 关联的生产批次
    createdTime: string   // 创建时间
}

/**
 * 图片服务
 */
export const imageService = {
    /**
     * 获取图片上传URL
     * @param bucketName 存储桶名称
     * @returns 上传URL
     */
    getUploadUrl(bucketName: string): string {
        return `${axiosInstance.defaults.baseURL}/api/Image/Upload?bucketName=${encodeURIComponent(bucketName)}`
    },

    /**
     * 获取多图片上传URL
     * @param bucketName 存储桶名称
     * @returns 上传URL
     */
    getMultipleUploadUrl(bucketName: string): string {
        return `${axiosInstance.defaults.baseURL}/api/Image/UploadMultiple?bucketName=${encodeURIComponent(bucketName)}`
    },

    /**
     * 通过Base64上传图片
     * @param data Base64图片数据
     * @returns 上传结果
     */
    async uploadBase64(data: Base64ImageRequest): Promise<ApiResult<ImageUploadResponseDto>> {
        try {
            const response = await axiosInstance.post('/api/Image/UploadBase64', data)
            return response.data
        } catch (error) {
            console.error('Base64图片上传失败:', error)
            throw error
        }
    },

    /**
     * 删除图片
     * @param imageId 图片主键编号
     * @returns 删除结果
     */
    async deleteImage(imageId: string): Promise<ApiResult<boolean>> {
        try {
            const response = await axiosInstance.delete('/api/Image/Delete', {
                params: {
                    objectName: imageId
                }
            })
            return response.data
        } catch (error) {
            console.error('删除图片失败:', error)
            throw error
        }
    },

    /**
     * 查询图片信息
     * @param params 查询参数
     * @returns 图片信息列表
     */
    async queryImages(params: ImageQueryParams): Promise<ApiResult<ImageInfoDto[]>> {
        try {
            const response = await axiosInstance.get('/api/Image/Query/Query', { params })
            return response.data
        } catch (error) {
            console.error('查询图片信息失败:', error)
            throw error
        }
    },

    /**
     * 获取图片详情
     * @param imageId 图片ID
     * @returns 图片详情
     */
    async getImageDetail(imageId: string): Promise<ApiResult<ImageInfoDto>> {
        try {
            const response = await axiosInstance.get(`/api/Image/GetDetail/${imageId}`)
            return response.data
        } catch (error) {
            console.error('获取图片详情失败:', error)
            throw error
        }
    },

    /**
     * 获取图片上传请求头
     * @returns 请求头对象
     */
    getUploadHeaders(): Record<string, string> {
        const token = localStorage.getItem('token')
        return token ? {
            'Authorization': `Bearer ${token}`
        } : {}
    }
} 